package com.yvon.service.demo.spring.factory.support;

import com.yvon.service.demo.spring.BeanException;
import com.yvon.service.demo.spring.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * 实例化策略
 *
 * @author Yvon
 * @since 2022/11/25
 */
public interface InstantiationStrategy {

    /**
     * 实例化
     *
     * @param beanDefinition bean定义
     * @param ctor           构造 里面包含了一些必要的类信息，有这个参数的目的就是为了拿到符合入参信息相对应的构造函数。
     * @param args           构造参数
     */
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor ctor, Object[] args) throws BeanException;
}
